﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Chapter09
{
    /// <summary>
    /// 第10章 定义类成员
    /// </summary>
    public class Program
    {
        public static void Main(string[] args)
        {
            #region 01 成员定义
            /*
             * 成员的访问级别
             * public 公共
             * private 私有
             * internal 内部 
             * protected 或 internal protected 内部派生类
             * readonly 只读
             * static 静态
             * 01 定义字段
             * 02 定义方法
             * 方法定义可使用关键字
             * virtual 虚方法，可重写
             * abstract 抽象，必须在非抽象的派生类中重写，且只能用于抽象类中
             * override 重写基类的方法
             * override sealed 密封
             * extern 方法定义由外部实现
             * static 静态
             * 03 定义属性
             * 属性也可以使用 virtual、override 和 abstract 关键字
             * 属性访问器也可以使用访问修饰符，但不能高于属性的访问
             * 04 在类图中添加成员
             * 在类图中打开类详细信息
             * 04.01 添加方法
             * 04.02 添加属性
             * 04.03 添加字段
             * 05 重构成员
             * 06 自动属性
             * */
            Code01.Code03.Example01.Demo.Begin();
            #endregion

            #region 02 类成员的其他主题
            /*
             * 01 隐藏基类方法
             * 02 调用重写或隐藏的基类方法
             * 03 嵌套的类型定义
             * 可以像成员一样使用多个访问修饰符，不仅仅局限于 public 和 internal，也可以隐藏
             * */
            Code02.Code01.Snippet03.Demo.Begin();
            Code02.Code01.Snippet04.Demo.Begin();
            Code02.Code02.Snippet02.Demo.Begin();
            Code02.Code03.Demo.Begin();
            Code02.Code03.Example02.Demo.Begin();
            #endregion

            #region 03 接口
            /*
             * 接口成员不允许使用访问修饰符
             * 接口成员不能包含代码体
             * 接口不能定义字段成员
             * 不能使用关键字 static、virtual、abstruct 或 sealed
             * 类型定义成员是禁止的
             * 在类中实现接口
             * 01 显示实现接口成员
             * 02 其他属性存取器
             * */
            Code03.Snippet06.Demo.Begin();
            #endregion

            #region 04 部分类定义
            /*
             * 包含部分类定义的每个文件中对类使用 partial 关键字
             * */
            #endregion

            #region 05 部分方法定义
            /*
             * 部分方法也可以是静态的，但必须是私有的，且不能有返回值
             * 部分方法不能使用out参数，但可以是ref参数。
             * 部分方法也不能使用virtual、abstract、override、new、sealed、extern
             * 这些限制是因为编译代码时，不实现的方法会完全删除
             * */
            #endregion

            #region 06 示例应用程序
            /*
             * 01 规划应用程序
             * 01.01 Card 类
             * 01.02 Deck 类
             * 02 编写类库
             * 02.01 添加 Suit 和 Rank 枚举
             * 02.02 添加 Card 类
             * 02.03 添加 Deck 类
             * 03 类库的客户应用程序
             * */
            Code06.CardLib.Demo.Begin();
            #endregion

            #region 07 调用层次结构窗口
            /*
             * Call Hierarchy 调用层次结构窗口
             * */
            #endregion

            #region 08 小结

            #endregion

            #region 09 练习
            Code09.Demo.Begin();
            #endregion

            #region 10 本章要点

            #endregion
        }
    }
}
